import pandas as pd
import matplotlib.pyplot as plt
import json


def calc_point_F(bf_rob,dt_ms)->dict:
  t = 0
  f = bf_rob.endPoint

  dt = dt_ms/1000

  args  ={
    'phi':[x for x in range(0,360)],
    'x':[],
    'y':[],
    'vx':[],
    'vy':[],
    'ax':[],
    'ay':[]
  }

  for deg in range(0,360):
    bf_rob.update(t)

    # print('F:deg={}:s(x,y)=({:.2f},{:.2f})\t;v(vx,vy)=({:.2f},{:.2f})\t;a(ax,ay)=({:.2f},{:.2f})'.format(
    #   deg,f.x,f.y,f.vx,f.vy,f.ax,f.ay
    # ))
    args['x'].append(f.x)
    args['y'].append(f.y)
    args['vx'].append(f.vx)
    args['vy'].append(f.vy)
    args['ax'].append(f.ax)
    args['ay'].append(f.ay)
    t+=dt

  return args

def toJSON(args,filename = '机械原理大作业1数据_JSON.json'):
  with open(filename,mode='w') as f:
    f.write(json.dumps(args))


def fromJSON(filename = '机械原理大作业1数据_JSON.json')->dict:
  with open(filename,mode='r') as f:
    return json.load(f)

def toExcel(args,filename = '机械原理大作业1数据_Excel.xlsx'):
  df = pd.DataFrame(args)
  df.to_excel(filename)

def draw_xy(args):
  phi = [a for a in range(0,360)]
  plt.figure(1)
  plt.subplot(211) #图一包含1行2列子图，当前画在第一行第一列图上
  plt.title('$\phi$-X')
  plt.xlabel('$\phi/°$')
  plt.ylabel(r'$y/m$')
  plt.xlim([0,360])
  plt.plot(args['x'])

  plt.figure(1)
  plt.subplot(212)#当前画在第一行第2列图上
  plt.title('$\phi$-Y')
  plt.xlim([0,360])
  plt.xlabel('$\phi/°$')
  plt.ylabel(r'$y/m$')
  plt.plot(args['y'])

  plt.show()

def draw_v(args):
  phi = args['phi']
  plt.figure(1)
  plt.subplot(211) #图一包含1行2列子图，当前画在第一行第一列图上
  plt.title(r'$\phi-V_{x}$')
  plt.xlabel('$\phi/°$')
  plt.ylabel(r'$V_{x}/m$')
  plt.xlim([0,360])
  plt.plot(phi,args['vx'])

  plt.figure(1)
  plt.subplot(212)#当前画在第一行第2列图上
  plt.title(r'$\phi-V_{y}$')
  plt.xlim([0,360])
  plt.xlabel('$\phi/°$')
  plt.ylabel(r'$V_{y}/m$')
  plt.plot(phi,args['vy'])

  plt.show()

def draw_a(args):
  phi = args['phi']
  plt.figure(1)
  plt.subplot(211) #图一包含1行2列子图，当前画在第一行第一列图上
  plt.title(r'$\phi-a_{x}$')
  plt.xlabel('$\phi/°$')
  plt.ylabel(r'$a_{x}/m$')
  plt.xlim([0,360])
  plt.plot(phi,args['ax'])

  plt.figure(1)
  plt.subplot(212)#当前画在第一行第2列图上
  plt.title(r'$\phi-a_{y}$')
  plt.xlim([0,360])
  plt.xlabel('$\phi/°$')
  plt.ylabel(r'$a_{y}/m$')
  plt.plot(phi,args['ay'])

  plt.show()